package com.free.ext.spring.message;

import com.free.messager.IMessager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Component;

import java.util.Locale;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 * </p>
 */
@Component
public class Messager implements IMessager {
    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/
    @Autowired
    private MessageSource messageSource;
    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/

    /**
     * 获得消息
     * @param key(枚举)
     * @param params(参数)
     * @return
     */
    public String getMessage(Enum<?> key,Object... params) {
        return getMessage(key.toString(), params);
    }

    /**
     * 获得消息
     * @param key
     * @param params
     * @return
     */
    public String getMessage(String key,Object... params) {
        String msg = messageSource.getMessage(key, params, null);
        return String.format("%s[%s]", msg,key);
    }

    /**
     * 获得本地化消息
     * @param key
     * @param local
     * @param params
     * @return
     */
    public String getMessageWithLocale(Enum<?> key,Locale local,Object... params) {
        return getMessageWithLocale(key.name(),local,params);
    }

    /**
     * 获得本地化消息
     * @param key
     * @param local
     * @param params
     * @return
     */
    public String getMessageWithLocale(String key, Locale local, Object... params) {
        String msg = messageSource.getMessage(key, params, local);
        return String.format("%s[%s]", msg,key);
    }

    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/
}
